//Blue Tails' moveset

freeslot("MT_THETAILSTAILS", "S_THETAILSTAILS1", "S_THETAILSTAILS2", "S_THETAILSTAILS3", "S_THETAILSTAILS4", "S_THETAILSTAILS5", "S_THETAILSTAILS6", "S_THETAILSTAILS7", "S_THETAILSTAILS8", "SPR_TAIL")

mobjinfo[MT_THETAILSTAILS] = {
	spawnstate = S_THETAILSTAILS1,
	radius = 10*FRACUNIT,
	height = 22*FRACUNIT,
	flags = MF_NOCLIP|MF_NOCLIPHEIGHT|MF_NOGRAVITY|MF_SOLID
}

states[S_THETAILSTAILS1] = {
    tics = 4,
	sprite = SPR_TAIL,
	frame = A,
    nextstate = S_THETAILSTAILS2
}

states[S_THETAILSTAILS2] = {
    tics = 4,
	sprite = SPR_TAIL,
	frame = B,
    nextstate = S_THETAILSTAILS3
}

states[S_THETAILSTAILS3] = {
    tics = 4,
	sprite = SPR_TAIL,
	frame = C,
    nextstate = S_THETAILSTAILS4
}

states[S_THETAILSTAILS4] = {
    tics = 4,
	sprite = SPR_TAIL,
	frame = D,
    nextstate = S_THETAILSTAILS5
}

states[S_THETAILSTAILS5] = {
    tics = 4,
	sprite = SPR_TAIL,
	frame = E,
    nextstate = S_THETAILSTAILS6
}

states[S_THETAILSTAILS6] = {
    tics = 4,
	sprite = SPR_TAIL,
	frame = F,
    nextstate = S_THETAILSTAILS7
}

states[S_THETAILSTAILS7] = {
    tics = 4,
	sprite = SPR_TAIL,
	frame = G,
    nextstate = S_THETAILSTAILS8
}

states[S_THETAILSTAILS8] = {
    tics = 4,
	sprite = SPR_TAIL,
	frame = H,
    nextstate = S_NULL
}

addHook("PlayerThink", function(player)
	if player.mo and player.mo.valid
		if not (mapheaderinfo[gamemap].typeoflevel & TOL_NIGHTS)
		and not (mapheaderinfo[gamemap].typeoflevel & TOL_XMAS)
		and player.powers[pw_carry] != CR_NIGHTSMODE
		and player.powers[pw_carry] != CR_NIGHTSFALL
			if player.tailsflyrun == nil
				player.tailsflyrun = 0
			end
			if player.tailsflyrun > 0
			and not P_IsObjectOnGround(player.mo)
				player.tailsflyrun = $-1
				player.mo.flags = $|MF_NOGRAVITY
				if (leveltime % 10) == 1
					S_StartSound(player.mo, sfx_putput)
				end
			end
			if player.tailstintblue == true
			and player.isblue == true
				if player.mo.state == S_PLAY_RUN
				and player.speed >= player.runspeed
				and P_IsObjectOnGround(player.mo)
				and not player.tailsflyrun
					player.mo.flags = $|MF_NOGRAVITY
					player.tailsflyrun = 2*TICRATE
				end
				if player.mo.flags & MF_NOGRAVITY
					if player.mo.state != S_PLAY_RUN
					or player.speed < player.runspeed
					or not player.tailsflyrun
						if not P_IsObjectOnGround(player.mo)
						and not (player.pflags & PF_JUMPED)
							P_DoJump(player, true)
							player.pflags = $ & ~PF_JUMPED
							player.mo.state = S_PLAY_SPRING
						end
						player.mo.flags = $ & ~MF_NOGRAVITY
						player.tailsflyrun = 0
					end
				end
			end
			if player.tailstintblue == true
			and player.isblue == true
			and (player.mo.state == S_PLAY_FLY or player.mo.state == S_PLAY_FLY_TIRED)
			and not player.bot
				if player.cmd.buttons & BT_USE
					player.pflags = $|PF_JUMPED
					player.mo.state = S_PLAY_ROLL
					S_StartSound(player.mo, sfx_spndsh, player)
					player.powers[pw_tailsfly] = 0
				end
			end
			if player.tailscanshoot == nil
				player.tailscanshoot = true
			end
			if player.tailstintblue == true
			and player.isblue == true
			and player.playerstate == PST_LIVE
				if player.cmd.buttons & BT_CUSTOM1
				and player.tailscanshoot == true
					local tailsprojectile = P_SpawnMobjFromMobj(player.mo, 0, 0, 0, MT_THETAILSTAILS)
					tailsprojectile.target = player.mo
					tailsprojectile.color = player.mo.color
					S_StartSound(player.mo, sfx_s1c9, player)
					player.tailsprojectile = tailsprojectile
					player.tailscanshoot = false
				end
				if player.tailscanshoot == false
					if player.tailsprojectile and player.tailsprojectile.valid
						player.drawangle = $+ANG10
						player.mo.state = S_PLAY_EDGE
						P_InstaThrust(player.mo, 0, 0)
						player.powers[pw_nocontrol] = 2
						if player.followmobj and player.followmobj.valid
							player.followmobj.flags2 = $|MF2_DONTDRAW
						end
						P_InstaThrust(player.tailsprojectile, player.drawangle-ANG10, 20*FRACUNIT)
						player.tailsprojectile.sprite = SPR_TAIL
					else
						if player.followmobj and player.followmobj.valid
							player.followmobj.flags2 = $ & ~MF2_DONTDRAW
						end
						player.tailscanshoot = true
					end
				end
			end
		end
	end
end)



addHook("MobjThinker", function(mobj)
	if mobj and mobj.valid
	and mobj.target and mobj.target.valid
	and mobj.target.player.isblue == true
		if (leveltime % 10) == 1
			S_StartSound(mobj, sfx_putput)
		end
	else
		mobj.momz = $+2*FRACUNIT*P_MobjFlip(mobj)
		if (leveltime % 10) == 1
			S_StartSound(mobj, sfx_putput)
		end
	end
end, MT_THETAILSTAILS)

addHook("MobjCollide", function(mobj, mo)
	if mobj and mobj.valid
	and mobj.target and mobj.target.valid
	and mo and mo.valid
		if mobj.target.player.isblue == true
			if mobj.target != mo
			and mobj.z >= mo.z
			and mobj.z <= mo.z+mo.height
				if mo.type == MT_PLAYER
					if mobj.target.player.bot
						if multiplayer
							P_DamageMobj(mo, mobj.target, mobj)
							P_RemoveMobj(mobj)
						else
							return
						end
					else
						P_DamageMobj(mo, mobj.target, mobj)
						P_RemoveMobj(mobj)
					end
				elseif mo.flags & MF_ENEMY
					P_DamageMobj(mo, mobj.target, mobj)
					P_RemoveMobj(mobj)
				end
			end
		end
	end
end, MT_THETAILSTAILS)